// pages/ide/index.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    textContent: '', // 文本内容
    textLength: 0, // 文本长度
    lineCount: 1, // 行数
    currentTime: '' // 当前时间
  },

  /**
   * 文本输入事件
   */
  onTextInput(e) {
    const content = e.detail.value;
    this.updateLineNumbers(content);
  },

  /**
   * 更新文本统计信息
   */
  updateLineNumbers(content) {
    // 统计行数和字符数
    const lines = content.split('\n');
    const lineCount = lines.length;
    
    this.setData({
      textContent: content,
      textLength: content.length,
      lineCount: lineCount
    });
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 初始化统计信息
    this.updateLineNumbers('');
    // 初始化时间显示
    this.updateTime();
    // 定时更新时间
    this.timeInterval = setInterval(() => {
      this.updateTime();
    }, 60000); // 每分钟更新
  },

  /**
   * 清空文本
   */
  clearText() {
    wx.showModal({
      title: '确认清空',
      content: '确定要清空所有文本吗？',
      success: (res) => {
        if (res.confirm) {
          this.setData({
            textContent: '',
            textLength: 0,
            lineCount: 1
          });
          wx.showToast({
            title: '已清空',
            icon: 'success'
          });
        }
      }
    });
  },

  /**
   * 保存文本
   */
  saveText() {
    if (!this.data.textContent.trim()) {
      wx.showToast({
        title: '没有内容可保存',
        icon: 'none'
      });
      return;
    }
    
    // 这里可以添加实际的保存逻辑
    wx.showToast({
      title: '保存成功',
      icon: 'success'
    });
  },

  /**
   * 打开文件
   */
  openFile() {
    wx.chooseMessageFile({
      count: 1,
      type: 'file',
      success: (res) => {
        const file = res.tempFiles[0];
        
        // 检查文件类型是否为文本文件
        const fileName = file.name || '';
        const isTextFile = this.checkIfTextFile(fileName, file.type);
        
        if (!isTextFile) {
          wx.showToast({
            title: '请选择文本文件',
            icon: 'none'
          });
          return;
        }
        
        // 读取文件内容
        this.readFileContent(file.path, fileName);
      },
      fail: (err) => {
        console.error('选择文件失败:', err);
        wx.showToast({
          title: '文件选择失败',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 检查是否为文本文件
   */
  checkIfTextFile(fileName, fileType) {
    // 支持的文本文件扩展名
    const textExtensions = [
      '.txt', '.js', '.jsx', '.ts', '.tsx', '.html', '.htm', '.css', '.scss', '.sass',
      '.json', '.xml', '.md', '.markdown', '.py', '.java', '.c', '.cpp', '.h', '.hpp',
      '.php', '.rb', '.go', '.rs', '.swift', '.kt', '.sh', '.bat', '.ps1', '.sql',
      '.vue', '.svelte', '.yml', '.yaml', '.toml', '.ini', '.cfg', '.conf', '.log'
    ];
    
    // 检查文件扩展名
    const extension = fileName.toLowerCase().substring(fileName.lastIndexOf('.'));
    const isTextByExtension = textExtensions.includes(extension);
    
    // 检查MIME类型
    const isTextByMimeType = fileType && fileType.startsWith('text/');
    
    return isTextByExtension || isTextByMimeType || !extension; // 无扩展名的文件也尝试读取
  },

  /**
   * 读取文件内容
   */
  readFileContent(filePath, fileName) {
    wx.showLoading({
      title: '读取文件中...'
    });
    
    // 使用FileSystemManager读取文件
    const fs = wx.getFileSystemManager();
    
    fs.readFile({
      filePath: filePath,
      encoding: 'utf8',
      success: (res) => {
        wx.hideLoading();
        
        // 更新文本内容
        this.updateLineNumbers(res.data);
        
        wx.showToast({
          title: `已打开 ${fileName}`,
          icon: 'success'
        });
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('读取文件失败:', err);
        
        // 如果UTF-8读取失败，尝试其他编码
        this.tryReadWithDifferentEncoding(filePath, fileName);
      }
    });
  },

  /**
   * 尝试不同编码读取文件
   */
  tryReadWithDifferentEncoding(filePath, fileName) {
    const fs = wx.getFileSystemManager();
    
    // 尝试二进制读取，然后手动处理编码
    fs.readFile({
      filePath: filePath,
      success: (res) => {
        try {
          // 尝试将二进制数据转换为字符串
          const content = this.bufferToString(res.data);
          this.updateLineNumbers(content);
          
          wx.showToast({
            title: `已打开 ${fileName}`,
            icon: 'success'
          });
        } catch (error) {
          console.error('文件编码转换失败:', error);
          wx.showToast({
            title: '文件格式不支持',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('文件读取完全失败:', err);
        wx.showToast({
          title: '文件读取失败',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 将ArrayBuffer转换为字符串
   */
  bufferToString(buffer) {
    // 尝试UTF-8解码
    const uint8Array = new Uint8Array(buffer);
    let result = '';
    
    for (let i = 0; i < uint8Array.length; i++) {
      result += String.fromCharCode(uint8Array[i]);
    }
    
    return result;
  },
  previewCode() {
    if (!this.data.textContent.trim()) {
      wx.showToast({
        title: '没有代码可预览',
        icon: 'none'
      });
      return;
    }
    
    // 跳转到预览页面，传递代码内容
    wx.navigateTo({
      url: `/pages/preview/index?code=${encodeURIComponent(this.data.textContent)}`
    });
  },

  /**
   * 更新时间显示
   */
  updateTime() {
    const now = new Date();
    const time = now.toLocaleTimeString('zh-CN', {
      hour12: false,
      hour: '2-digit',
      minute: '2-digit'
    });
    this.setData({
      currentTime: time
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    // 清除定时器
    if (this.timeInterval) {
      clearInterval(this.timeInterval);
    }
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})